package com.leon.androidcoursedesign.adapters.baseAdapter;

import android.content.Context;
import android.os.Build;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.HashMap;
import java.util.Map;

/**
 * 基本的ViewHolder
 * 该类提供了一些常用的绑定数据方法，可自行根据需要添加
 * <br/>
 * <strong>注意：设置点击事件时请注意该类中两个不同参数的setOnClickListener()方法，具体使用可看方法的注释</strong>
 */
public class BaseViewHolder extends RecyclerView.ViewHolder {
    public BaseViewHolder(@NonNull View itemView) {
        super(itemView);
    }

    /**
     * 通过ID找到对应的控件
     *
     * @param id    控件ID
     * @param <T>   控件
     * @return  返回控件
     */
    public <T extends View> T findById(int id) {
        return (T) itemView.findViewById(id);
    }

    /**
     * 用于设置控件的text
     *
     * @param id    控件ID
     * @param text  设置的文本
     * @return  返回this
     */
    public BaseViewHolder setText(int id, String text) {
        TextView view = findById(id);
        view.setText(text);

        return this;
    }

    /**
     * 用于设置控件的监听事件
     *
     * @param id    控件ID
     * @param onClickListener   监听事件
     * @return  返回this
     */
    public BaseViewHolder setOnClickListener (int id, View.OnClickListener onClickListener) {
        View view = findById(id);
        view.setOnClickListener(onClickListener);

        return this;
    }

    /**
     * 该方法只需要覆盖onClickListener即可,不需要指定要监听的控件
     * 点击的监听适用于整个item(不需要指定哪一个控件)
     *
     * @param onClickListener   监听事件
     * @return  返回this
     */
    public BaseViewHolder setOnClickListener (View.OnClickListener onClickListener) {
        itemView.setOnClickListener(onClickListener);
        return this;
    }

    public BaseViewHolder setLongClickListener (View.OnLongClickListener onLongClickListener) {
        itemView.setOnLongClickListener(onLongClickListener);
        return this;
    }
}
